MOD=Cash
SRC_DIR=./cache/logic

.PHONY:sim
sim: $(MOD).waveform.vcd

.PHONY:verilate
verilate: .stamp.verilate

.PHONY:build
build: $(MOD)Artifact/V$(MOD)

.PHONY:waves
waves: $(MOD).waveform.vcd
	@echo
	@echo "### WAVES ###"
	gtkwave waveform.vcd

$(MOD).waveform.vcd: ./$(MOD)Artifact/V$(MOD)
	@echo
	@echo "### SIMULATING ###"
	@./$(MOD)Artifact/V$(MOD)

./$(MOD)Artifact/V$(MOD): .stamp.verilate
	@echo
	@echo "### BUILDING SIM ###"
	make -C $(MOD)Artifact -f V$(MOD).mk V$(MOD)

.stamp.verilate: $(SRC_DIR)/$(MOD).sv $(SRC_DIR)/$(MOD).cpp
	@echo
	@echo "### VERILATING ###"
	verilator -Wall --trace 										 \
		-Mdir $(MOD)Artifact 											 \
		-cc $(SRC_DIR)/$(MOD).sv $(SRC_DIR)/Mem.sv $(SRC_DIR)/MemArb.sv $(SRC_DIR)/LFSR.sv\
		--exe $(SRC_DIR)/$(MOD).cpp
	@touch .stamp.verilate

.PHONY:lint
lint: $(SRC_DIR)/$(MOD).sv
	verilator --lint-only $(SRC_DIR)/$(MOD).sv $(SRC_DIR)/Mem.sv $(SRC_DIR)/MemArb.sv 

.PHONY: clean
clean:
	rm -rf .stamp.*;
	rm -rf ./$(MOD)Artifact
	rm -rf waveform.vcd